package main

import (
	"fmt"
	"sync"

	"time"
)

var wg sync.WaitGroup

// 使用channel的方式

func worker(ch <-chan bool) {
	defer wg.Done()
LABEL:
	for {
		fmt.Println("worker")
		time.Sleep(time.Second)
		select {
		case <-ch:
			break LABEL
		default:
		}
	}
	// 如何接收外部命令实现退出

}

func main() {
	//make和new的区别
	//都是用来初始化内存
	//new多用来为基本数据类型（bool string int struct...）初始化内存，返回的是指针
	//make用来初始化slice map channel,返回的是对应类型
	var exitChan = make(chan bool)
	wg.Add(1)
	go worker(exitChan)
	// 如何优雅的实现结束子goroutine
	time.Sleep(time.Second * 5)
	exitChan <- true

	wg.Wait()
	fmt.Println("over")
}
